﻿using System;
using System.Collections.Generic;
using System.Linq;
using Defero.Core;
using Defero.Core.DataTransferObjects;
using Defero.Infrastucture.Persistence.BugTracker;

namespace Defero.Infrastucture.Repositories
{
    public partial class BugTrackerRepository
    {
        #region Bug Related
        /// <summary>
        /// Establece si un bug esta asignado a un determinado usuario.
        /// </summary>
        /// <param name="userId">Id del usuario.</param>
        protected Func<Bugs, bool> AssignedUserIs(Guid userId)
        {
            return bug => bug.Asignee == userId;
        }
        /// <summary>
        /// Establece si un bug se encuentra en determinado estatus.
        /// </summary>
        /// <param name="status"></param>
        protected Func<Bugs, bool> CurrentStatusIs(Defero.Core.Entities.BugStatus status)
        {
            return bug => bug.BugStatus.Guid == GetUniqueIdentifier(status);
        }
        /// <summary>
        /// Establece si un bug se encuentra en un determinado rango de estatus.
        /// </summary>
        /// <param name="status"></param>
        protected Func<Bugs, bool> CurrentStatusInRange(params Defero.Core.Entities.BugStatus[] status)
        {
            IEnumerable<Guid> range = status.Select(item => GetUniqueIdentifier(item));
            return bug => range.Contains(bug.BugStatus.Guid);
        }
        /// <summary>
        /// Convierte un Persistence.Bugs a DataTransferObjects.Bug
        /// </summary>
        protected Func<Bugs, BugHeader> BugSelector
        {
            get
            {
                return bug => new Defero.Core.DataTransferObjects.BugHeader()
                {
                    ReferenceKey = bug.Reference,
                    Description = bug.Description,
                    Project = bug.Projects.Name,
                    Module = bug.Modules.Name,
                    Status = bug.BugStatus.Name
                };
            }
        }
        #endregion

    }
}
